//
//  BaseFlutterViewController.h
//  Project
//
//  Created by liting on 2025/9/1.
//

#import <UIKit/UIKit.h>
#import <Flutter/Flutter.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * Flutter 页面基类 - 优化版
 * 解决导航栏控制时机问题，支持灵活的导航栏配置和参数传递
 */
@interface BaseFlutterViewController : UIViewController

#pragma mark - 初始化方法

/// 使用共享引擎初始化（默认显示导航栏）
+ (instancetype)controllerWithRoute:(nullable NSString *)route;

/// 使用共享引擎初始化，并配置导航栏
+ (instancetype)controllerWithRoute:(nullable NSString *)route
                   navigationBarHidden:(BOOL)hidden;

/// 使用共享引擎初始化，带参数
+ (instancetype)controllerWithRoute:(nullable NSString *)route
                          parameters:(nullable NSDictionary *)parameters;

/// 使用共享引擎初始化，配置导航栏并带参数
+ (instancetype)controllerWithRoute:(nullable NSString *)route
                navigationBarHidden:(BOOL)hidden
               useIndependentEngine:(BOOL)independent
                         parameters:(nullable NSDictionary *)parameters;

/// 使用独立引擎初始化（默认显示导航栏）
+ (instancetype)controllerWithIndependentEngineWithRoute:(nullable NSString *)route;

/// 使用独立引擎初始化，并配置导航栏
+ (instancetype)controllerWithIndependentEngineWithRoute:(nullable NSString *)route
                                        navigationBarHidden:(BOOL)hidden;

/// 使用独立引擎初始化，带参数
+ (instancetype)controllerWithIndependentEngineWithRoute:(nullable NSString *)route
                                             parameters:(nullable NSDictionary *)parameters;

/// 使用独立引擎初始化，配置导航栏并带参数
+ (instancetype)controllerWithIndependentEngineWithRoute:(nullable NSString *)route
                                        navigationBarHidden:(BOOL)hidden
                                             parameters:(nullable NSDictionary *)parameters;

#pragma mark - 属性

/// 内部的 FlutterViewController
@property (nonatomic, strong, readonly) FlutterViewController *flutterViewController;

/// Flutter 引擎
@property (nonatomic, strong, readonly) FlutterEngine *flutterEngine;

/// 是否使用独立引擎
@property (nonatomic, assign, readonly) BOOL useIndependentEngine;

/// 初始路由地址
@property (nonatomic, copy, nullable) NSString *initialRoute;

/// 是否隐藏导航栏（默认NO）
@property (nonatomic, assign) BOOL navigationBarHidden;

/// 是否自动恢复导航栏状态（默认YES）
@property (nonatomic, assign) BOOL autoRestoreNavigationBar;

/// 是否启用导航栏处理（默认YES）
@property (nonatomic, assign) BOOL enableNavigationBarHandling;

/// 传递给Flutter页面的参数
@property (nonatomic, copy, nullable) NSDictionary *parameters;

#pragma mark - 方法通道

/// 获取基础方法通道
@property (nonatomic, strong, readonly) FlutterMethodChannel *methodChannel;

/// 注册方法调用处理器
- (void)registerMethodChannelWithName:(NSString *)channelName
                             handler:(FlutterMethodCallHandler)handler;

/// 向Flutter发送方法调用
- (void)callFlutterMethod:(NSString *)method
                arguments:(nullable id)arguments
               completion:(nullable FlutterResult)completion;

/// 发送参数到Flutter页面（在页面初始化后调用）
- (void)sendParametersToFlutter:(NSDictionary *)parameters;

#pragma mark - 导航栏控制方法（安全的）

/// 安全地显示导航栏（动画）
- (void)safeShowNavigationBarAnimated:(BOOL)animated;

/// 安全地隐藏导航栏（动画）
- (void)safeHideNavigationBarAnimated:(BOOL)animated;

/// 安全地切换导航栏显示状态（动画）
- (void)safeToggleNavigationBarAnimated:(BOOL)animated;

#pragma mark - 生命周期控制

/// 手动释放资源
- (void)releaseResources;

@end

NS_ASSUME_NONNULL_END
